//String对象的比较：
/*public final class String
        implements java.io.Serializable, Comparable<java.lang.String>, CharSequence {*/
//这一部分采用密封类，所以也表明了String类本身就是不可能被继承的，因为被final修饰
//并且我们通过了源码也可以直接看出它是西安Comparable的接口，也表明了它会自动重写CompareTo方法，
//当然也是按照了字典序排列

public class Test1 {
    public static void main1(String[] args) {
        String str1 = "Hello";
        String str2 = "world";
        /*System.out.println(str1 > str2);//这样会报错*/
        /*System.out.println(str1.equals(str2));*/
        System.out.println(str1.compareTo(str2));

        System.out.println("=============");

        String s1 = "abcd";
        String s2 = "acad";
        System.out.println(s1.compareTo(s2));//打印结果为-1
        //如果s1大于s2，那么返回了正数
        //如果不大于，则返回负数，如果相同，那么返回为0
        //这个-1的是b的ACSII码值与c的ACSII的差值

        /*
        如果在长度一样的情况下，那么比较相同位置的字符的大小，遇到的第一个比较得到的值就是整个所有的字符串的比较的返回值
         */
    }

    public static void main2(String[] args) {
        String str3 = "abcd";
        String str4 = "abcdef";
        System.out.println(str3.compareTo(str4));

        /*
        compareTo方法的重写的源码：
        public int compareTo(String anotherString) {
            int len1 = value.length;
            int len2 = anotherString.value.length;
            int lim = Math.min(len1, len2);
            char v1[] = value;
            char v2[] = anotherString.value;

            int k = 0;
            while (k < lim) {
                char c1 = v1[k];
                char c2 = v2[k];
                if (c1 != c2) {
                    return c1 - c2;
                }
                k++;
            }
            return len1 - len2;
        }*/

        //所以str3和str4的比较逻辑：
        /**
         * 比较逻辑：
         * 1.如果两个字符串的长度是一样的，那么第一个不一样的字符的大小就是整个字符串的大小
         * 2.如果两个字符串长度不一样，那么先比较两个长度的差值个：
         * （就是分开比较两个字符串的长度，取较小的那个长度）：int lim = Math.min(len1, len2);
         * 3.在这个差值范围内，有不一样的字符就能比较出来了大小
         * 4.但是如果内容都是一样的嘛，那么谁长，那么谁就大！
         */
    }

    public static void main3(String[] args) {
        String str1 = "Abcd";
        String str2 = "abcd";
        System.out.println(str1.compareTo(str2));//根据ACSII码值来进行比较
        //但是我们要忽略大小写去进行比较
        System.out.println(str1.compareToIgnoreCase(str2));
        //compareToIgnoreCase是忽略大小写
    }
}

//总结：
//1.==
//2.equals
//3.CompareTO
//4.CompareToIgnoreCase